package IOC;

import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author chenyuan
 * @date 2020/11/19 10:34
 */
public class IOCTest {
    @Test
    public void test() throws Exception {
        UserController userController = new UserController();
        UserService userService = new UserService();
        // 获得 userController 对于的 Class 对象
        Class<? extends UserController> clazz = userController.getClass();
        // 获取 userController 类中的所有属性
        Field field = clazz.getDeclaredField("userService");
        // 设置可访问
        field.setAccessible(true);
        // 通过 Setter 方法设置属性
        String fieldName = field.getName();
        // 拼接 Setter 方法名称
        //  1. 得到 UserService
        fieldName = fieldName.substring(0,1).toUpperCase() + fieldName.substring(1, fieldName.length());
        //  2. 得到 setUserService
        String setUserService = "set" + fieldName;
        // 通过方法注入属性对象
        Method method = clazz.getMethod(setUserService, UserService.class);
        // 执行反射
        method.invoke(userController, userService);
        System.out.println("[Controller 中的对象] 是否等于 [创建的对象] " +
                            userController.getUserService().equals(userService));
    }
}
